"""
llm_factory.py 模块
LLM工厂类（支持本地模型和API）
"""
from src.llm.base_llm import BaseLLM
from src.llm.huggingface_llm import HuggingFaceLLM  # 本地模型
from src.llm.deepseek_api import DeepSeekAPI  # API客户端
from config.llm_config import LLMConfig
# 新增：导入全局配置获取函数
from config.app_config import get_app_config


class LLMFactory:
    """LLM工厂，根据配置创建对应的LLM实例（本地模型或API）"""

    @classmethod
    def create_llm(cls, config: LLMConfig) -> BaseLLM:
        """
        根据配置创建LLM实例（原有方法，保持不变）

        Args:
            config: LLM配置类

        Returns:
            LLM实例

        Raises:
            ValueError: 不支持的模型类型
        """
        if config.model_type == "deepseek_api":
            # 创建DeepSeek API客户端
            return DeepSeekAPI(
                api_key=config.deepseek_api_key,
                base_url=config.deepseek_api_base_url,
                temperature=config.deepseek_api_temperature,
                max_new_tokens=config.deepseek_api_max_new_tokens
            )
        elif config.model_type == "deepseek":
            # 本地DeepSeek模型（保留，可切换回）
            return HuggingFaceLLM(
                model_name="deepseek-ai/DeepSeek-7B-Chat",
                model_path=config.deepseek_model_path,
                device=config.deepseek_device,
                max_new_tokens=config.deepseek_api_max_new_tokens,  # 复用API的max_tokens配置
                temperature=config.deepseek_api_temperature
            )
        else:
            raise ValueError(f"不支持的模型类型: {config.model_type}，支持：deepseek_api/deepseek")

    @staticmethod
    def get_llm() -> BaseLLM:
        """
        新增：通过全局配置获取LLM实例（供问答模块使用）
        不影响原有create_llm方法的功能
        """
        # 获取全局配置中的LLM配置
        app_config = get_app_config()
        llm_config = app_config.llm_config
        # 复用现有create_llm方法的逻辑
        return LLMFactory.create_llm(llm_config)
